package br.com.bringme.models.pedido;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import br.com.bringme.models.entrega.Veiculo;
import br.com.bringme.models.local.Endereco;
import br.com.bringme.models.user.Atendente;
import br.com.bringme.models.user.Cliente;
import br.com.bringme.models.user.Entregador;
import br.com.bringme.mvc.Model;

@Entity
@Table(schema=Model.SCHEMA, name = "pedidos")
@SequenceGenerator(name = "pedidos_seq", schema=Model.SCHEMA, sequenceName = "pedidos_id_pedido_seq")
public class Pedido extends Model {

	@Id
	@GeneratedValue(generator="pedidos_seq", strategy=GenerationType.AUTO)
    @Column(name = "id_pedido") 
	protected Integer id;

	@OneToOne
	@JoinColumn(name = "cliente")
	protected Cliente cliente;

	@OneToOne
	@JoinColumn(name = "atendente")
	protected Atendente atendente;

	@OneToMany(cascade = CascadeType.ALL)
	@JoinTable(schema=Model.SCHEMA, name = "itens_pedido", joinColumns = { @JoinColumn(name = "item") }, inverseJoinColumns = { @JoinColumn(name = "pedido") })
	protected Set<Item> item = new HashSet<Item>();

	@OneToOne
	@JoinColumn(name="origem")
	protected Endereco origem;

	@OneToOne
	@JoinColumn(name="destino")
	protected Endereco destino;

	protected Float valor;

	@Column(name="data_entrega")
	protected Date data;

	@OneToOne
	@JoinColumn(name="entregador")
	protected Entregador entregador;

	@OneToOne
	@JoinColumn(name="veiculo")
	protected Veiculo veiculo;

	@OneToOne
	@JoinColumn(name="status")
	protected StatusPedido status;

	protected String observacoes;

	protected String receptor;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public Atendente getAtendente() {
		return atendente;
	}

	public void setAtendente(Atendente atendente) {
		this.atendente = atendente;
	}

	public Set<Item> getItem() {
		return item;
	}

	public void setItem(Set<Item> item) {
		this.item = item;
	}

	public Endereco getOrigem() {
		return origem;
	}

	public void setOrigem(Endereco origem) {
		this.origem = origem;
	}

	public Endereco getDestino() {
		return destino;
	}

	public void setDestino(Endereco destino) {
		this.destino = destino;
	}

	public float getValor() {
		return valor;
	}

	public void setValor(float valor) {
		this.valor = valor;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public Entregador getEntregador() {
		return entregador;
	}

	public void setEntregador(Entregador entregador) {
		this.entregador = entregador;
	}

	public Veiculo getVeiculo() {
		return veiculo;
	}

	public void setVeiculo(Veiculo veiculo) {
		this.veiculo = veiculo;
	}

	public StatusPedido getStatus() {
		return status;
	}

	public void setStatus(StatusPedido status) {
		this.status = status;
	}

	public String getObservacoes() {
		return observacoes;
	}

	public void setObservacoes(String observacoes) {
		this.observacoes = observacoes;
	}

	public String getReceptor() {
		return receptor;
	}

	public void setReceptor(String receptor) {
		this.receptor = receptor;
	}
	
	@Override
	public String toString() {
		return "Pedido [id=" + id + ", cliente=" + cliente + ", atendente="
				+ atendente + ", item=" + item + ", origem=" + origem
				+ ", destino=" + destino + ", valor=" + valor + ", data="
				+ data + ", entregador=" + entregador + ", veiculo=" + veiculo
				+ ", status=" + status + ", observacoes=" + observacoes
				+ ", receptor=" + receptor + "]";
	}
}
